gdk/surface: Add toplevel_resize vfunc
authorJonas Ådahl <jadahl@gmail.com>
Mon, 15 Jul 2019 08:54:44 +0000 (10:54 +0200)
committerJonas Ådahl <jadahl@gmail.com>
Thu, 25 Jul 2019 08:24:50 +0000 (10:24 +0200)
To separate how toplevels and popups are configured, a first step is to
introduce a resize-only vfunc for backends to implement. It's meant to
only configure toplevel windows, i.e. popups. Currently it's used for
both types, but introducing the resize-only API is a first step.

gdk/broadway/gdksurface-broadway.c
gdk/gdksurface.c
gdk/gdksurfaceprivate.h
gdk/quartz/gdksurface-quartz.c
gdk/wayland/gdksurface-wayland.c
gdk/win32/gdksurface-win32.c
gdk/x11/gdksurface-x11.c

index 6d072359ac21ef4bef36ce2e25bcc09353635486..097b53facf9646b06a1e11dfa1f52bf1e1fcbfa3 100644 (file)
@@ -424,6 +424,14 @@ gdk_broadway_surface_move_resize (GdkSurface *surface,
     }
 }
 
+static void
+gdk_broadway_surface_toplevel_resize (GdkSurface *surface,
+                                      gint        width,
+                                      gint        height)
+{
+  gdk_broadway_surface_move_resize (surface, FALSE, 0, 0, width, height);
+}
+
 static void
 gdk_broadway_surface_raise (GdkSurface *surface)
 {
@@ -1312,6 +1320,7 @@ gdk_broadway_surface_class_init (GdkBroadwaySurfaceClass *klass)
   impl_class->lower = gdk_broadway_surface_lower;
   impl_class->restack_toplevel = gdk_broadway_surface_restack_toplevel;
   impl_class->move_resize = gdk_broadway_surface_move_resize;
+  impl_class->toplevel_resize = gdk_broadway_surface_toplevel_resize;
   impl_class->get_geometry = gdk_broadway_surface_get_geometry;
   impl_class->get_root_coords = gdk_broadway_surface_get_root_coords;
   impl_class->get_device_state = gdk_broadway_surface_get_device_state;
index 07bd67d57fb01c69b7b91a6f429183df242f3e05..6a29aa6ddf2097415e80be69b2f6c4a86622d11d 100644 (file)
@@ -2142,7 +2142,7 @@ gdk_surface_resize (GdkSurface *surface,
                     gint       width,
                     gint       height)
 {
-  gdk_surface_move_resize_internal (surface, FALSE, 0, 0, width, height);
+  GDK_SURFACE_GET_CLASS (surface)->toplevel_resize (surface, width, height);
 }
 
 
index 5f86e3c60a89e06078201cd5c742248e080f6bba..eb7702f09b4295e2e87f086d3fb040363231c45e 100644 (file)
@@ -119,6 +119,9 @@ struct _GdkSurfaceClass
                                          gint             y,
                                          gint             width,
                                          gint             height);
+  void         (* toplevel_resize)      (GdkSurface      *surface,
+                                         gint             width,
+                                         gint             height);
   void         (* move_to_rect)         (GdkSurface       *surface,
                                          const GdkRectangle *rect,
                                          GdkGravity       rect_anchor,
index cf0cd15dd91185a5dd76710a1a221b18f4831a47..f77dc3f9bd15806f23b0124d4770a312a57d732b 100644 (file)
@@ -1255,6 +1255,14 @@ gdk_surface_quartz_move_resize (GdkSurface *window,
     }
 }
 
+static void
+gdk_surface_quartz_toplevel_resize (GdkSurface *surface,
+                                    gint        width,
+                                    gint        height)
+{
+  window_quartz_resize (window, width, height);
+}
+
 /* Get the toplevel ordering from NSApp and update our own list. We do
  * this on demand since the NSApp’s list is not up to date directly
  * after we get windowDidBecomeMain.
@@ -2642,6 +2650,7 @@ gdk_surface_impl_quartz_class_init (GdkSurfaceImplQuartzClass *klass)
   impl_class->lower = gdk_surface_quartz_lower;
   impl_class->restack_toplevel = gdk_surface_quartz_restack_toplevel;
   impl_class->move_resize = gdk_surface_quartz_move_resize;
+  impl_class->toplevel_resize = gdk_surface_quartz_toplevel_resize;
   impl_class->get_geometry = gdk_surface_quartz_get_geometry;
   impl_class->get_root_coords = gdk_surface_quartz_get_root_coords;
   impl_class->get_device_state = gdk_surface_quartz_get_device_state;
index ab7565a5236b4798fb27e551010c19878d582f87..d9e63c3453aa20048af1ec7855efd5c9f4ea067b 100644 (file)
@@ -2734,6 +2734,18 @@ gdk_wayland_surface_move_resize (GdkSurface *surface,
     gdk_wayland_surface_maybe_resize (surface, width, height, impl->scale);
 }
 
+static void
+gdk_wayland_surface_toplevel_resize (GdkSurface *surface,
+                                     gint        width,
+                                     gint        height)
+{
+  GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface);
+
+  gdk_wayland_surface_maybe_resize (surface,
+                                    width, height,
+                                    impl->scale);
+}
+
 /* Avoid zero width/height as this is a protocol error */
 static void
 sanitize_anchor_rect (GdkSurface   *surface,
@@ -3810,6 +3822,7 @@ gdk_wayland_surface_class_init (GdkWaylandSurfaceClass *klass)
   impl_class->lower = gdk_wayland_surface_lower;
   impl_class->restack_toplevel = gdk_wayland_surface_restack_toplevel;
   impl_class->move_resize = gdk_wayland_surface_move_resize;
+  impl_class->toplevel_resize = gdk_wayland_surface_toplevel_resize;
   impl_class->move_to_rect = gdk_wayland_surface_move_to_rect;
   impl_class->get_geometry = gdk_wayland_surface_get_geometry;
   impl_class->get_root_coords = gdk_wayland_surface_get_root_coords;
index c82b397d03d5ae5ce1a402d24b9c3d23699423d1..720426583f7f8e6365f7821779aecb36f5a9a756 100644 (file)
@@ -1262,6 +1262,14 @@ gdk_win32_surface_move_resize (GdkSurface *window,
   _gdk_win32_emit_configure_event (window);
 }
 
+static void
+gdk_win32_surface_toplevel_resize (GdkSurface *surface,
+                                   gint        width,
+                                   gint        height)
+{
+  gdk_win32_surface_move_resize  (surface, FALSE, 0, 0, width, height);
+}
+
 static void
 gdk_win32_surface_raise (GdkSurface *window)
 {
@@ -5083,6 +5091,7 @@ gdk_win32_surface_class_init (GdkWin32SurfaceClass *klass)
   impl_class->lower = gdk_win32_surface_lower;
   impl_class->restack_toplevel = gdk_win32_surface_restack_toplevel;
   impl_class->move_resize = gdk_win32_surface_move_resize;
+  impl_class->toplevel_resize = gdk_win32_surface_toplevel_resize;
   impl_class->get_geometry = gdk_win32_surface_get_geometry;
   impl_class->get_device_state = gdk_surface_win32_get_device_state;
   impl_class->get_root_coords = gdk_win32_surface_get_root_coords;
index 654876e2b89484384b220996a9cf2b8a3ea4cdc9..9859518e8b25b78894b4f5971396394ab953abdb 100644 (file)
@@ -1392,6 +1392,14 @@ gdk_x11_surface_move_resize (GdkSurface *surface,
     }
 }
 
+static void
+gdk_x11_surface_toplevel_resize (GdkSurface *surface,
+                                 gint        width,
+                                 gint        height)
+{
+  x11_surface_resize (surface, width, height);
+}
+
 static void gdk_x11_surface_restack_toplevel (GdkSurface *surface,
                                               GdkSurface *sibling,
                                               gboolean    above);
@@ -4590,6 +4598,7 @@ gdk_x11_surface_class_init (GdkX11SurfaceClass *klass)
   impl_class->lower = gdk_x11_surface_lower;
   impl_class->restack_toplevel = gdk_x11_surface_restack_toplevel;
   impl_class->move_resize = gdk_x11_surface_move_resize;
+  impl_class->toplevel_resize = gdk_x11_surface_toplevel_resize;
   impl_class->get_geometry = gdk_x11_surface_get_geometry;
   impl_class->get_root_coords = gdk_x11_surface_get_root_coords;
   impl_class->get_device_state = gdk_x11_surface_get_device_state;